﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//法一
//int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize)
//{
//    int* table = (int*)calloc(numsSize + 1, sizeof(int));
//    int* ret = (int*)malloc(numsSize * sizeof(int));
//    int i;
//    for (i = 0; i < numsSize; i++)
//    {
//        table[nums[i]] = nums[i];
//    }
//    for (i = 1; i <= numsSize; i++)
//    {
//        if (table[i] != i)
//        {
//            ret[(*returnSize)++] = i;
//        }
//    }
//    return ret;
//}
//法二
//int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize) {
//    for (int i = 0; i < numsSize; i++) {
//        int x = (nums[i] - 1) % numsSize;
//        nums[x] += numsSize;
//    }
//    int* ret = malloc(sizeof(int) * numsSize);
//    *returnSize = 0;
//    for (int i = 0; i < numsSize; i++) {
//        if (nums[i] <= numsSize) {
//            ret[(*returnSize)++] = i + 1;
//        }
//    }
//    return ret;
//}
//
//int main()
//{
//    int nums[] = { 1,1 };
//    int x = 0;
//    int* ret = findDisappearedNumbers(nums, 2, &x);
//    int i;
//    for (i = 0; i < x; i++)
//    {
//        printf("%d ", ret[i]);
//    }
//    return 0;
//}
//给定一个二进制数组 nums ， 计算其中最大连续 1 的个数。
//
//
//
//示例 1：
//
//输入：nums = [1, 1, 0, 1, 1, 1]
//输出：3
//解释：开头的两位和最后的三位都是连续 1 ，所以最大连续 1 的个数是 3.
//int findMaxConsecutiveOnes(int* nums, int numsSize)
//{
//    int i, count1 = 0, count2 = 0;
//    for (i = 0; i < numsSize; i++)
//    {
//        if (nums[i] == 1)
//        {
//            count1++;
//        }
//        if (nums[i] == 0 || i == numsSize - 1)
//        {
//            if (count1 > count2)
//            {
//                count2 = count1;
//                count1 = 0;
//            }
//            else
//            {
//                count1 = 0;
//            }
//        }
//    }
//    return count2;
//}
// 完全数（Perfect number），又称完美数或完备数，是一些特殊的自然数。

//它所有的真因子（即除了自身以外的约数）的和（即因子函数），恰好等于它本身。
//
//例如：28，它有约数1、2、4、7、14、28，除去它本身28外，其余5个数相加，1 + 2 + 4 + 7 + 14 = 28。
//
//输入n，请输出n以内(含n)完全数的个数。
//
//数据范围： 1 \le n \le 5 \times 10 ^ {5} \1≤n≤5×10
//5
//
//
//
//本题输入含有多组样例。
//
//输入描述：
//输入一个数字n
//
//输出描述：
//输出不超过n的完全数的个数
//
//示例1
//输入：
//1000
//7
//100
//复制
//输出：
//3
//1
//2
//#include<stdio.h>
//int main()
//{
//    int n, i, j, sum, count;
//    while (scanf("%d", &n) != EOF)
//    {
//        count = 0;
//        for (i = 2; i < n; i++)
//        {
//            sum = 0;
//            for (j = 1; j < i; j++)
//            {
//                if (i % j == 0)
//                {
//                    sum += j;
//                }
//            }
//            if (sum == i)
//            {
//                count++;
//            }
//        }
//        printf("%d\n", count);
//    }
//
//    return 0;
//}
////改进版
////约数就是能够被数字整除，而这里简化的一个思路是数字能够被整除，则除数和结果就都是约数，这种思路下，只需要从1计算到平方根即可比如：数字8，
////能够整除2，结果是4，
////则除数2和结果4都是约数，而这两个只需要一次计算判断即可。需要注意的是4，9，25...这种，除数和结果相同的情况，则除数或者结果只相加一次就够了
//#include<stdio.h>
//#include<math.h>
//int main()
//{
//    int n, i, j, sum, count;
//    while (scanf("%d", &n) != EOF)
//    {
//        count = 0;
//        for (i = 2; i < n; i++)
//        {
//            sum = 1;
//            for (j = 2; j <= sqrt(i); j++)
//            {
//                if (i % j == 0)
//                {
//                    sum += j;
//                    if (j != sqrt(i))
//                        sum += i / j;
//                }
//
//
//            }
//            if (sum == i)
//            {
//                count++;
//            }
//        }
//        printf("%d\n", count);
//    }
//
//    return 0;
//}
//描述
//输入一个整数，将这个整数以字符串的形式逆序输出
//程序不考虑负数的情况，若数字含有0，则逆序形式也含有0，如输入为100，则输出为001
//
//
//数据范围： 0 \le n \le 2 ^ {30} - 1 \0≤n≤2
//30
//−1
//输入描述：
//输入一个int整数
//
//输出描述：
//将这个整数以字符串的形式逆序输出
//
//示例1
//输入：
//1516000
//复制
//输出：
//0006151
//#include<stdio.h>
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    if (n == 0)
//        printf("0");
//    while (n)
//    {
//        int a = n % 10 + '0';
//        n = n / 10;
//        printf("%c", a);
//    }
//}